package org.面试题.Synchronized;

import java.util.concurrent.TimeUnit;

/**
 * 1. person4的两个同步方法 ， send() 被static 修饰
 *                        call() 就是普通的同步方法
 *              send的锁 锁得是类的class模板
 *              call的锁 所得是调用的对象。
 *              两把锁，
 *              看时间了，所以先执行 打电话， 或执行 发短信
 * 2. 在new 一个person
 *            A 执行send()
 *            B 执行call()
 *            依然是两把锁，所以看时间，先执行，打电话，或执行发短信
 *
 */
public class synchronizedDemo4 {
    public static void main(String[] args) throws InterruptedException {
        Person4 person4  =  new Person4();
        Person4 person5  =  new Person4();
        new Thread(()->{
            person4.send();
        },"A").start();

        TimeUnit.SECONDS.sleep(2);

        new Thread(()->{
            person5.call();
        },"B").start();
    }
}
class Person4{
    public static synchronized void send(){
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+"发消息");
    }

    public  synchronized void call(){
        System.out.println(Thread.currentThread().getName()+"打电话");
    }

}
